﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using UTL;
using BLL;


namespace DAL
{
    /*
     * Utiliza la capa UTL para conectarse con la BD y la BLL para obtener el objeto a persistir.
     */


    /*Clase de soporte que tiene metodos comunes a todas las otras clases DAL, como selectAll, selectById, 
     * Que acceden a los sp dinamicos*/

    public class DAL
    {
        public SqlCommand crearSP(string SPname)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = UTL.UTL_Conexion.instancia.getConnection;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = SPname;

            return cmd;
        }

        public SqlParameter crearParametroSQL(SqlDbType tipo, string nombre)
        {
            SqlParameter p = new SqlParameter();
            p.Direction = ParameterDirection.Input;
            p.SqlDbType = tipo;
            p.ParameterName = nombre;
            
            return p;
        }

        public DataTable selectAll(string tableName)
        {
            SqlCommand cmd = crearSP("spd_select");

            SqlParameter p = crearParametroSQL(SqlDbType.NVarChar, "@tableName");
            p.Value = tableName;

            cmd.Parameters.Add(p);

            DataTable dtSQL = new DataTable();
            dtSQL = UTL.UTL_Conexion.instancia.executeSelectQuery(cmd);

            return dtSQL;
        }

        public DataTable selectEnables(string tableName)
        {
            SqlCommand cmd = crearSP("spd_selectEnables");

            SqlParameter p = crearParametroSQL(SqlDbType.NVarChar, "@tableName");
            p.Value = tableName;

            cmd.Parameters.Add(p);

            DataTable dtSQL = new DataTable();
            dtSQL = UTL.UTL_Conexion.instancia.executeSelectQuery(cmd);

            return dtSQL;
        }

        public DataTable selectById(string tableName, int id)
        {
            SqlCommand cmd = crearSP("spd_selectById");

            SqlParameter p = crearParametroSQL(SqlDbType.NVarChar, "@tableName");
            p.Value = tableName;

            cmd.Parameters.Add(p);

            p = crearParametroSQL(SqlDbType.Int,"@id");
            p.Value = id;

            cmd.Parameters.Add(p);

            DataTable dtSQL = new DataTable();
            dtSQL = UTL.UTL_Conexion.instancia.executeSelectQuery(cmd);

            return dtSQL;
        }

        public DataTable selectByName(string tableName, String name)
        {
            SqlCommand cmd = crearSP("spd_selectByName");

            SqlParameter p = crearParametroSQL(SqlDbType.NVarChar, "@tableName");
            p.Value = tableName;

            cmd.Parameters.Add(p);

            p = crearParametroSQL(SqlDbType.NVarChar, "@nombre");
            p.Value = name;

            cmd.Parameters.Add(p);

            DataTable dtSQL = new DataTable();
            dtSQL = UTL.UTL_Conexion.instancia.executeSelectQuery(cmd);

            return dtSQL;

        }
    }

    //Modulo 1: Centro Medico

    public class DAL_CentroMedico
    {
//NOTA: lo dejo para el ultimo, no hay otro centro medico para agregar 

        BLL_CentroMedico objCMedico = new BLL_CentroMedico();

        public Boolean insertar(BLL_CentroMedico objCentroMedico)
        {
          /*  DAL dal = new DAL();

            SqlCommand cmd = dal.crearSP("sp_insertCentroMedico");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQLString("@nombre", "");
            cmd.Parameters.Add(p);
             
            UTL.UTL_Conexion.instancia.executeNonQuery(cmd);*/

            return true;
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }

        public DataTable obtenerTodo()
        {
            DAL dal = new DAL();
            return dal.selectAll("CentroMedico");
        }

        public BLL_CentroMedico obtenerPorId(int id)
        {
            DAL dal = new DAL();
            DataTable dt = dal.selectById("CentroMedico", id);

            DataColumn[] pk = new DataColumn[1];
            pk[0] = dt.Columns["id"];
            dt.PrimaryKey = pk;

            DataRow dr = dt.Rows.Find(id);
            
            objCMedico.mision = dr["mision"].ToString();
            objCMedico.vision = dr["vision"].ToString();
            objCMedico.lema = dr["lema"].ToString();
            objCMedico.mail = dr["mail"].ToString();
            objCMedico.objetivo = dr["objetivo"].ToString();
            objCMedico.telefono = dr["telefono"].ToString();
            objCMedico.nombre = dr["nombre"].ToString();
            objCMedico.direccion = dr["direccion"].ToString();
            objCMedico.historia = dr["historia"].ToString();
            //objCMedico.cp = dr["cp"].ToString();

              return objCMedico;
        }

    }

    public class DAL_Valor
    {
        DAL dal = new DAL();
        /*
        * Inserta un valor, lo hace directamente al centro medico IV.
        */
        public Boolean insertar( BLL_Valor objValor)
        {
            SqlCommand cmd = dal.crearSP("sp_insertCentroMedico");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.NVarChar, "@nombre");
            p.Value = objValor.nombre;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@descripcion");
            p.Value = objValor.descripcion;
            cmd.Parameters.Add(p);

            return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true; 
        }

        public DataTable obtenerTodo()
        {
            return dal.selectAll("Valor");
        }

        public DataTable obtenerPorId(int id)
        {
            return dal.selectById("Valor", id);
        }

    }

    /*
     * Inserta una novedad, el estado inicial es habilitado
     */
    public class DAL_Novedad
    {
        DAL dal = new DAL();

        public Boolean insertar( BLL_Novedad objNovedad)
        {
            SqlCommand cmd = dal.crearSP("sp_insertNovedad");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.Date, "@fechaAlta");
            p.Value= objNovedad.fechaAlta;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@cuerpo");
            p.Value = objNovedad.cuerpo;
            cmd.Parameters.Add(p);

            /*p = dal.crearParametroSQL(SqlDbType.NVarChar, "@");
            p.Value =
            cmd.Parameters.Add(p);*/

            return  UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }

        public DataTable obtenerTodo()
        {
            return dal.selectAll("Novedad");
        }

        public DataTable obtenerPorId(int id)
        {
            return dal.selectById("Novedad", id);
        }

        public DataTable obtenerHablilitados()
        {
            return dal.selectEnables("Novedad");
        }

    }
    
    //Modulo 2:Profesional
    
    public class DAL_Especialidad
    {
        DAL dal = new DAL();
        public Boolean insertar( BLL_Especialidad objEspecialidad)
        {
            SqlCommand cmd = dal.crearSP ("sp_insertEspecialidad");

            // crear parametros por cada atributo del objeto
            SqlParameter p= dal.crearParametroSQL(SqlDbType.NVarChar, "@nombre");
            p.Value = objEspecialidad.nombre;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@descripcion");
            p.Value = objEspecialidad.descripcion;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Bit, "@habilitado");
            p.Value = objEspecialidad.habilitado;
            cmd.Parameters.Add(p);

            return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }

        public DataTable obtenerTodo()
        {
            return dal.selectAll("Especialidad");
        }

        public DataTable obtenerPorId(int id)
        {
            return dal.selectById("Especialidad", id);
        }

    }

    public class DAL_Profesional
    {
        DAL dal = new DAL();
        /*
        * Inserta un valor, lo hace directamente al centro medico IV.
        */
        public Boolean insertar(BLL_Profesional objProfesional)
        {
            SqlCommand cmd = dal.crearSP("sp_insertProfesional");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.NVarChar, "@nombre");
            p.Value = objProfesional.nombre;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@apellido");
            p.Value = objProfesional.apellido;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@email");
            p.Value = objProfesional.email;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@extracto");
            p.Value = objProfesional.extracto;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@foto");
            p.Value = objProfesional.foto;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@perfil");
            p.Value = objProfesional.perfil;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@titulo");
            p.Value = objProfesional.titulo;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@telefono");
            p.Value = objProfesional.telefono;
            cmd.Parameters.Add(p);
			
			/*Se hace pensando en un cambio de [profesional]1..1 [Especialidad]1..* [profesional]
             Por lo que se cambia en el objeto PROFESIONAL, los atributos idEspecialidad por ObjEspecialidad*/
            /*Para hacer este cambio efectivo, es necesario modificar el SP y cambiar la estructura de la BD,
             sacando la tabla ProfesionalXespecialidad*/
           /* p = dal.crearParametroSQL(SqlDbType.NVarChar, "@idEspecialidad");
            p.Value = objProfesional.Especialidad.id;
            cmd.Parameters.Add(p);*/

            return  UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }


        public DataTable obtenerTodo()
        {
            return dal.selectAll("Profesional");
        }

        public DataTable obtenerPorId(int id)
        {
            return dal.selectById("Profesional", id);
        }

      
    }

    public class DAL_Horario
    {
        DAL dal = new DAL();
        /*
        * Inserta un valor, lo hace directamente al centro medico IV.
        */
        public Boolean insertar(BLL_Horario objHorario)
        {
            SqlCommand cmd = dal.crearSP("sp_insertHorario");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.Int, "@idProfesional");
            p.Value = objHorario.profesional.id;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Int, "@dia");
            p.Value = objHorario.dia;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Text, "@semana");
            p.Value = objHorario.Semana;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Int, "@semanaNro");
            p.Value = objHorario.semanaNro;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Time, "@desde");
            p.Value = objHorario.desde;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Time, "@hasta");
            p.Value = objHorario.hasta;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Bit, "@habilitado");
            p.Value = objHorario.habilitado;
            cmd.Parameters.Add(p);
            
            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@turno");
            p.Value = objHorario.turno;
            cmd.Parameters.Add(p);

            return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }


        public DataTable obtenerTodo()
        {
            return dal.selectAll("Horario");
        }

        public DataTable obtenerHabilitados()
        {
            return dal.selectEnables("Horario");
        }

        public DataTable obtenerPorId(int id)
        {
            return dal.selectById("Horario", id);
        }

        public DataTable selectProfesionalesAtiendenHoy(string dia, int semanaNro)
        {
            DAL dal = new DAL();
            SqlCommand cmd = dal.crearSP("sp_selectProfesionalesAtiendenHoy");

            SqlParameter p = dal.crearParametroSQL(SqlDbType.NVarChar, "@dia");
            p.Value = dia;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Int, "@semanaNro");
            p.Value = semanaNro;
            cmd.Parameters.Add(p);

            DataTable dtSQL = new DataTable();
            dtSQL = UTL.UTL_Conexion.instancia.executeSelectQuery(cmd);

            return dtSQL;
        }

    }

    //public class DAL_Semana
    //{
    //    DAL dal = new DAL();
    //    /*
    //    * Inserta un valor, lo hace directamente al centro medico IV.
    //    */
    //    public Boolean insertar(BLL_Semana objSemana)
    //    {
    //        SqlCommand cmd = dal.crearSP("sp_insertSemana");

    //        // crear parametros por cada atributo del objeto
    //        SqlParameter p = dal.crearParametroSQL(SqlDbType.NVarChar, "@posicion");
    //        p.Value = objSemana.posicion;
    //        cmd.Parameters.Add(p);

    //        return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
    //    }

    //    /* al modificar se puede setear el atributo habilitado*/
    //    public Boolean modificar()
    //    {
    //        return true;
    //    }

    //    public DataTable obtenerTodo()
    //    {
    //        return dal.selectAll("Semana");
    //    }

    //    public DataTable obtenerPorId(int id)
    //    {
    //        return dal.selectById("Semana", id);
    //    }

    //}

    //public class DAL_DiaAtencion
    //{
    //    DAL dal = new DAL();
    //    /*
    //    * Inserta un valor, lo hace directamente al centro medico IV.
    //    */
    //    public Boolean insertar(BLL_DiaAtencion objDiaAtencion)
    //    {
    //        SqlCommand cmd = dal.crearSP("sp_insertDiaAtencion");

    //        // crear parametros por cada atributo del objeto
    //        SqlParameter p = dal.crearParametroSQL(SqlDbType.NVarChar, "@dia");
    //        p.Value = objDiaAtencion.dia;
    //        cmd.Parameters.Add(p);

    //        return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
    //    }

    //    /* al modificar se puede setear el atributo habilitado*/
    //    public Boolean modificar()
    //    {
    //        return true;
    //    }

    //    public DataTable obtenerTodo()
    //    {
    //        return dal.selectAll("DiaAtencion");
    //    }

    //    public DataTable obtenerPorId(int id)
    //    {
    //        return dal.selectById("DiaAtencion", id);
    //    }

    //}

    public class DAL_EstadoProfesional
    {
        DAL dal = new DAL();
        /*
        * Inserta un valor, lo hace directamente al centro medico IV.
        */
        public Boolean insertar(BLL_EstadoProfesional objEstadoProfesional)
        {
            SqlCommand cmd = dal.crearSP("sp_insertEstadoProfesional");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.NVarChar, "@descripcion");
            p.Value = objEstadoProfesional.descripcion;
            cmd.Parameters.Add(p);

            return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }

        public DataTable obtenerTodo()
        {
            return dal.selectAll("EstadoProfesional");
        }

        public DataTable obtenerPorId(int id)
        {
            return dal.selectById("EstadoProfesional", id);
        }

    }

    public class DAL_HistorialEstadoProfesional
    {
        DAL dal = new DAL();
        /*
        * Inserta un valor, lo hace directamente al centro medico IV.
        */
        public Boolean insertar(BLL_HistorialEstadoProfesional objHistorialEstadoProfesional)
        {
            SqlCommand cmd = dal.crearSP("sp_insertHistorialEstadoProfesional");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.Int, "@idProfesional");
            p.Value = objHistorialEstadoProfesional.profesional.id;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Date, "@idEstadoProfesional");
            p.Value = objHistorialEstadoProfesional.estadoProfesional.id;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Date, "@fecha");
            p.Value = objHistorialEstadoProfesional.fecha;
            cmd.Parameters.Add(p);

            return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }

        public DataTable obtenerTodo()
        {
            return dal.selectAll("HistorialEstadoProfesional");
        }

        public DataTable obtenerPorId(int id)
        {
            return dal.selectById("HistorialEstadoProfesional", id);
        }

    }
   
    //public class DAL_ProfesionalxEspecialidad
    //{
    //    DAL dal = new DAL();
    //    /*
    //    * Inserta un valor, lo hace directamente al centro medico IV.
    //    */
    //    public Boolean insertar(BLL_ProfesionalxEspecialidad objProfesionalxEspecialidad)
    //    {
    //        SqlCommand cmd = dal.crearSP("sp_insertHistorialEstadoProfesional");

    //        // crear parametros por cada atributo del objeto
    //        SqlParameter p = dal.crearParametroSQL(SqlDbType.Int, "@profesionalId");
    //        p.Value = objProfesionalxEspecialidad.profesionalId;
    //        cmd.Parameters.Add(p);

    //        p = dal.crearParametroSQL(SqlDbType.Date, "@especialidadId");
    //        p.Value = objProfesionalxEspecialidad.especialidadId;
    //        cmd.Parameters.Add(p);

    //        p = dal.crearParametroSQL(SqlDbType.Date, "@habilitadp");
    //        p.Value = objProfesionalxEspecialidad.habilitado;
    //        cmd.Parameters.Add(p);

    //        return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
    //    }

    //    /* al modificar se puede setear el atributo habilitado*/
    //    public Boolean modificar()
    //    {
    //        return true;
    //    }

    //    public DataTable obtenerTodo()
    //    {
    //        return dal.selectAll("ProfesionalxEspecialidad");
    //    }

    //    public DataTable obtenerHabilitados()
    //    {
    //        return dal.selectEnables("ProfesionalxEspecialidad");
    //    }

    //    public DataTable obtenerPorId(int id)
    //    {
    //        return dal.selectById("ProfesionalxEspecialidad", id);
    //    }

    //}


    //Modulo 3:Paciente

    public class DAL_Paciente
    {
        DAL dal = new DAL();
        /*
        * Inserta un valor, lo hace directamente al centro medico IV.
        */
        public Boolean insertar(BLL_Paciente objPaciente)
        {
            SqlCommand cmd = dal.crearSP("sp_insertProfesional");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.NVarChar, "@nombre");
            p.Value = objPaciente.nombre;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@apellido");
            p.Value = objPaciente.apellido;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Date, "@fechaNacimiento");
            p.Value = objPaciente.fechaNacimiento;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Bit, "@sexo");
            p.Value = objPaciente.sexo;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@domicilio");
            p.Value = objPaciente.domicilio;
            cmd.Parameters.Add(p);
            
            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@localidad");
            p.Value = objPaciente.localidad;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@provincia");
            p.Value = objPaciente.provincia;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@email");
            p.Value = objPaciente.email;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@telefono");
            p.Value = objPaciente.telefono;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Int, "@idObraSocial");
            p.Value = objPaciente.idObraSocial;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@nroAfiliado");
            p.Value = objPaciente.nroAfiliado;
            cmd.Parameters.Add(p);

            return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }


        public DataTable obtenerTodo()
        {
            return dal.selectAll("Paciente");
        }

        public DataTable obtenerPorId(int id)
        {
            return dal.selectById("Paciente", id);
        }
    }

    public class DAL_DetalleHistoriaClinica
    {
        DAL dal = new DAL();
        /*
        * Inserta un valor, lo hace directamente al centro medico IV.
        */
        public Boolean insertar(BLL_DetalleHistoriaClinica objDetalleHistoriaClinica)
        {
            SqlCommand cmd = dal.crearSP("sp_insertProfesional");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.Int, "@idHistoriaClinica");
            p.Value = objDetalleHistoriaClinica.historiaClinica.id;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Int, "@idProfesional");
            p.Value = objDetalleHistoriaClinica.profesional.id;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Date, "@fecha");
            p.Value = objDetalleHistoriaClinica.fecha;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@sintomas");
            p.Value = objDetalleHistoriaClinica.sintomas;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@diagnostico");
            p.Value = objDetalleHistoriaClinica.diagnostico;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@tratamiento");
            p.Value = objDetalleHistoriaClinica.tratamiento;
            cmd.Parameters.Add(p);


            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@observacion");
            p.Value = objDetalleHistoriaClinica.observacion;
            cmd.Parameters.Add(p);

            return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }

        public DataTable obtenerTodo()
        {
            return dal.selectAll("DetalleHistoriaClinica");
        }

        public DataTable obtenerPorId(int id)
        {
            return dal.selectById("DetalleHistoriaClinica", id);
        }
    }

    public class DAL_HistoriaClinica
    {
        DAL dal = new DAL();
        /*
        * Inserta un valor, lo hace directamente al centro medico IV.
        */
        public Boolean insertar(BLL_Paciente objPaciente)
        {
            SqlCommand cmd = dal.crearSP("sp_insertProfesional");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.NVarChar, "@nombre");
            p.Value = objPaciente.nombre;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@apellido");
            p.Value = objPaciente.apellido;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Date, "@fechaNacimiento");
            p.Value = objPaciente.fechaNacimiento;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Bit, "@sexo");
            p.Value = objPaciente.sexo;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@domicilio");
            p.Value = objPaciente.domicilio;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@localidad");
            p.Value = objPaciente.localidad;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@provincia");
            p.Value = objPaciente.provincia;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@email");
            p.Value = objPaciente.email;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@telefono");
            p.Value = objPaciente.telefono;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.Int, "@idObraSocial");
            p.Value = objPaciente.idObraSocial;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@nroAfiliado");
            p.Value = objPaciente.nroAfiliado;
            cmd.Parameters.Add(p);

            return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }


        public DataTable obtenerTodo()
        {
            return dal.selectAll("HistoriaClinica");
        }

        public DataTable obtenerPorId(int id)
        {
            return dal.selectById("HistoriaClinica", id);
        }
    }

    public class DAL_ObraSocial
    {

        public DataTable obtenerTodo()
        {
            DAL dal = new DAL();
            return dal.selectAll("ObraSocial");
        }

        public DataTable obtenerPorId(int id)
        {
            DAL dal = new DAL();
            return dal.selectById("ObraSocial", id);
        }
    }

    //Modulo 4: Seguridad


    public class DAL_Usuario
    {
        DAL dal = new DAL();
        public Boolean insertar(BLL_Usuario objUsuario)
        {
           SqlCommand cmd = dal.crearSP("sp_insertUsuario");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.NVarChar, "@nombre");
            p.Value = objUsuario.nombre;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@contraseña");
            p.Value = objUsuario.contraseña;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@nombrePerfil");
            p.Value = objUsuario.nombrePerfil;
            cmd.Parameters.Add(p);

            return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }

        public DataTable obtenerTodo()
        {
            DAL dal = new DAL();
            return dal.selectAll("Usuario");
        }

        public DataTable obtenerPorName(String name)
        {
            return dal.selectByName("Usuario", name);
        }

    }

    public class DAL_Perfil
    {
        DAL dal = new DAL();
        public Boolean insertar(BLL_Perfil objPerfil)
        {
            SqlCommand cmd = dal.crearSP("sp_insertPerfil");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.NVarChar, "@nombre");
            p.Value = objPerfil.nombre;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@descripcion");
            p.Value = objPerfil.descripcion;
            cmd.Parameters.Add(p);

            return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }
        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }

        public DataTable obtenerTodo()
        {
           
            return dal.selectAll("Perfil");
        }

        public DataTable obtenerPorName(String name)
        {
            return dal.selectByName("Perfil", name);
        }

    }

    public class DAL_Seccion
    {
        DAL dal = new DAL();

        public Boolean insertar(BLL_Seccion objSeccion)
        {
            SqlCommand cmd = dal.crearSP("sp_insertUsuario");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.NVarChar, "@nombre");
            p.Value = objSeccion.nombre;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@Cuerpo");
            p.Value = objSeccion.Cuerpo;
            cmd.Parameters.Add(p);

            return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }
        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }

        public DataTable obtenerTodo()
        {
            DAL dal = new DAL();
            return dal.selectAll("Especialidad");
        }

        public DataTable obtenerPorId(int id)
        {
            DAL dal = new DAL();
            return dal.selectById("Especialidad", id);
        }

    }

    public class DAL_SeccionXPerfil
    {
        DAL dal = new DAL();
        /*inserta una seccionXPerfil con habilitado= true*/
        public Boolean insertar(BLL_SeccionXPerfil objSeccionXPerfil)
        {
            SqlCommand cmd = dal.crearSP("sp_insertSeccionXPerfil");

            // crear parametros por cada atributo del objeto
            SqlParameter p = dal.crearParametroSQL(SqlDbType.NVarChar, "@nombreSeccion");
            p.Value = objSeccionXPerfil.nombreSeccion;
            cmd.Parameters.Add(p);

            p = dal.crearParametroSQL(SqlDbType.NVarChar, "@nombrePerfil");
            p.Value = objSeccionXPerfil.nombrePerfil;
            cmd.Parameters.Add(p);

            return UTL.UTL_Conexion.instancia.executeNonQuery(cmd);
        }

        /* al modificar se puede setear el atributo habilitado*/
        public Boolean modificar()
        {
            return true;
        }

        public DataTable obtenerTodo()
        {
            return dal.selectAll("SeccionXPerfil");
        }

    }


}

